package cn.edu.dgut.kk;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class App {

    public static void main(String[] args)
    {

        System.out.println("Spring,Hello World!");
        // 创建Spring Application Context--spring应用程序上下文，即Spring容器。
        // 注意：ClassPathXmlApplicationContext，顾名思义，它是通过读取xml文件来装配Bean的。
        // 如果是通过Java Config装配Bean，则是使用AnnotationConfigApplicationContext。
        //ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
        // scan会扫描指定包和它的所有子包，可以添加多个包名作为参数。
        //context.scan("cn.edu.dgut.kk");
        //动态注册Bean
        context.registerBean("playerBean",player.class);

        // 扫描指定包后，必需调用refresh()刷新spring容器，refresh方法会执行很多工作，具体看refresh()的源码，在这里暂时解理为重新装配扫描包后得到的Bean。
        // 只能执行refresh()一次
        //context.refresh();

        player player = (player) context.getBean("playerBean");

        System.out.println(player);
        Object user = context.getBean("userBean");
        System.out.println(user);
        // 通过Bean的名字name, 调用context.getBean方法从Spring容器中获取这个Bean。
        Customer customerBean = (Customer) context.getBean("customerBean");

        System.out.println(customerBean);
        customerBean.displayInfo();

        // 调用close方法，关闭Spring容器，删除所有Bean。
        ((AnnotationConfigApplicationContext) context).close();
    }

}

